package com.mall.common.exception.base;

import com.mall.common.utils.MessageUtils;
import com.mall.common.utils.StringUtils;

/**
 * 基础异常
 * Created by zhonglin on 2020/4/8.
 */
public class BaseException
    extends RuntimeException {

  private static final long serialVersionUID = 1L;

  /**
   * 所属模块
   */
  private String module;

  /**
   * 错误码
   */
  private String code;

  /**
   * 错误码对应的参数
   */
  private Object[] args;

  /**
   * 错误消息
   */
  private String defaultMessage;

  public BaseException(String module,
                       String code,
                       Object[] args,
                       String defaultMessage) {

    this.module = module;
    this.code = code;
    this.args = args;
    this.defaultMessage = defaultMessage;
  }

  public BaseException(String module,
                       String code,
                       Object[] args) {

    this(module, code, args, null);
  }

  public BaseException(String module,
                       String defaultMessage) {

    this(module, null, null, defaultMessage);
  }

  public BaseException(String code,
                       Object[] args) {

    this(null, code, args, null);
  }

  public BaseException(String defaultMessage) {

    this(null, null, null, defaultMessage);
  }

  @Override
  public String getMessage() {

    String message = null;
    if (!StringUtils.isEmpty(code)) {
      message = MessageUtils.message(code, args);
    }
    if (message == null) {
      message = defaultMessage;
    }
    return message;
  }

  public String getModule() {

    return module;
  }

  public String getCode() {

    return code;
  }

  public Object[] getArgs() {

    return args;
  }

  public String getDefaultMessage() {

    return defaultMessage;
  }

}
